/**
 * Clase que contiene las listas de paginas pendientes por revisar y las nuevas encontradas
 * 
 * @author HPCIII_Team2013
 */
package cl.ucn.hpc.direccion;

import java.util.concurrent.LinkedBlockingQueue;

public class Direction extends Thread {	
	private static Direction INSTANCIA = null;
	private LinkedBlockingQueue<String> linksPendientes;
	private LinkedBlockingQueue<String> linksNuevos;

	/**
	 * Constructor de la clase
	 */
	public Direction() {
		linksPendientes = new LinkedBlockingQueue<String>();
		linksNuevos = new LinkedBlockingQueue<String>();
	}

	/**
	 * Metodo que se encarga de retornar siempre la misma instancia del objeto.
	 * Si no existe una instancia, la genera.
	 * 
	 * @return Su unica instancia
	 */
	public static Direction getInstance() {
		synchronized (Direction.class) {
			if (INSTANCIA == null) {
				INSTANCIA = new Direction();
			}
			return INSTANCIA;
		}
	}

	/**
	 * Asigna la lista de links pendientes recibidos a su atributo.
	 * 
	 * @param linksPendientes_ Lista con los links pendientes que se deben agregar.
	 */
	public void cargarLinksPendientes(LinkedBlockingQueue<String> linksPendientes_) {
		linksPendientes = linksPendientes_;
	}

	/**
	 * Asigna la lista de links nuevos recibidos a su atributo.
	 * 
	 * @param linksNuevos_ Lista con los links nuevos que se deben agregar.
	 */
	public void cargarLinksNuevos(LinkedBlockingQueue<String> linksNuevos_) {
		linksNuevos = linksNuevos_;
	}

	/**
	 * Entrega la lista de links pendientes que tiene como atributo.
	 * 
	 * @return La lista de links pendientes.
	 */
	public LinkedBlockingQueue<String> getLinksPendientes() {
		return linksPendientes;
	}

	/**
	 * Entrega la lista de links nuevos que tiene como atributo.
	 * 
	 * @return La lista de links nuevos.
	 */
	public LinkedBlockingQueue<String> getLinksSinRevisar() {
		return linksNuevos;
	}

	/**
	 * Inserta una nueva pagina en la lista de links pendientes
	 * 
	 *  @param url El nuevo enlace a ser agregado
	 */
	public void agregarLinkPendiente(String url) {
		linksPendientes.add(url);
	}
	
	/**
	 * Iserta una nueva pagina en la lista de links nuevos
	 * 
	 * @param url El nuevo enlace a ser agregado
	 */
	public void agregarLinkNuevo(String url) {
		linksNuevos.add(url);
	}

}
